/*
Source : https://leetcode.com/problems/missing-number/
Author : nflush@outlook.com
Date   : 2016-07-18
*/

/*
268. Missing Number
 ?  

Question Editorial Solution  
 My Submissions 




?Total Accepted: 60501
?Total Submissions: 146173
?Difficulty: Medium



Given an array containing n distinct numbers taken from 0, 1, 2, ..., n, find the one that is missing from the array. 

For example,
 Given nums = [0, 1, 3] return 2. 

Note:
 Your algorithm should run in linear runtime complexity. Could you implement it using only constant extra space complexity? 

Credits:
Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.



Subscribe to see which companies asked this question
*/
class Solution {//36ms
public:
    int missingNumber(vector<int>& nums) {
        int ret = nums.size();
        for (int i = nums.size(); i--;){
            ret += i - nums[i];
        }
        return ret;
    }
};

class Solution { //36ms
public:
    int missingNumber(vector<int>& nums) {
        int ret = nums.size();
        int i = nums.size();
        while (i > 4){
            i--;
            ret += i - nums[i];
            i--;
            ret += i - nums[i];
            i--;
            ret += i - nums[i];
            i--;
            ret += i - nums[i];
        }
        while(i--){
            ret += i - nums[i];
        }
        return ret;
    }
};

class Solution {//36ms
public:
    int missingNumber(vector<int>& nums) {
        int ret = nums.size() * (nums.size() + 1) /2;
        for (int i : nums){
            ret -=  i;
        }
        return ret;
    }
};

